package com.jman.login.service;

import com.jman.login.clients.Agent;
import com.jman.login.clients.UserClients;
import com.jman.login.domain.User;
import com.jman.login.dto.LoginFormDTO;
import com.jman.login.dto.Result;
import com.jman.login.dto.UserWithToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import javax.annotation.Resource;

import static com.jman.login.util.RegexUtils.isPasswordInvalid;
import static com.jman.login.util.RegexUtils.isPhoneInvalid;

@Service
public class LoginService {
    @Resource
    private UserClients clients;

    public Result login(LoginFormDTO loginFormDTO) {
        //先取出表单信息
        String phone = loginFormDTO.getPhone();
        String password = loginFormDTO.getPassword();
        boolean isSuperior = loginFormDTO.getIsSuperior();

        //判断表单信息的合法性
        //首先判断 手机号 密码 的输入格式是否出错
        if (isPhoneInvalid(phone)) {
            return Result.fail("电话号码格式出错！");
        } else if (isPasswordInvalid(password)) {
            return Result.fail("密码只能是4~32位的字母、数字、下划线！");
        }

        //查询用户、判断手机号是否存在
        UserWithToken userWithToken = Agent.getUserByPhone(clients, phone);
        if (userWithToken == null){
            return Result.fail("用户不存在，请先注册");
        }
        User user = userWithToken.getUser();
        String token = userWithToken.getToken();
        //判断密码是否正确
        if (!user.getPassword().equals(password)){
            return Result.fail("密码输入错误，请重新输入");
        }

        //如果存在则判断是否为管理员(管理员可以普通用户的身份登录)
        if (isSuperior && !user.getIsSuperior()) {
            return Result.fail("对不起，你不是管理员");
        }
        return Result.ok(token);
    }


//    @Autowired
//    private RestTemplate restTemplate;

//    public Result login(String phone){
//        String url = "http://userservice/user/" + phone;
//        User user = restTemplate.getForObject(url, User.class);
//        return Result.ok(user);
//    }

}
